package com.projetosi.web.server.sistema.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * 
 * @author Filipe Alencar, Felipe J. Cavalcanti, Rodrigo L. de Brito, Thiago Gon�alves, Victor Hugo Arcelino.
 *
 */
public class Validador {

	/**
	 * Verifica se uma String so contem letras.
	 * @param texto String ser verificada e validada.
	 * @return true: se a string somente conter letras.
	 * 		   false: caso a String possua algum digito.
	 */        

	public static boolean validaStringSemNumeros(String texto){
		char[] caracteres = texto.toCharArray();
		for(char c : caracteres)
			if(Character.isDigit(c))
				return false;
		return true;
	}
	/**
	 * Verifica se uma String so contem digitos.
	 * @param texto A string a ser verificadada e validada.
	 * @return true: Se a string apenas possui digitos.
	 * 			false: caso a String possua alguma letra.
	 */
	public static boolean validaStringSemLetras(String texto){
		try{
			Double.parseDouble(texto);
			return true;
		}catch(NumberFormatException nfex){
			return false;
		}		
	}

	/**
	 * Metodo que valida um email. Usa uma expressao regular que especifica o formato do email.
	 * @param email Email
	 * @return true caso o email seja validado, ou false caso contrario.
	 */
	public static boolean validaEmail(String email){
		Pattern p = Pattern.compile("[a-z._0-9]{1,}@{1}[a-z]{1,}[.]{1}[a-z.]{1,}");
		Matcher m = p.matcher(email);
		if(!m.matches())
			return false;
		return true;
	}

	
	/**
	 * Metodo que verifica se uma String é valida.
	 * @param string - String a se verificar
	 * @return true caso a String seja valida e false caso contrario.
	 */
	public static boolean validarString(String string){
		if(!(string instanceof String) || string.length() < 1)
			return false;
		return true;
	}
	/**
	 * @param chave
	 * @param atributo
	 * @param tipoOrdenacao
	 * @param criterioOrdenacao
	 * @throws Exception
	 */
	public static void validarPesquisarItem(String chave, String atributo,
			String tipoOrdenacao, String criterioOrdenacao) throws Exception {
		if(!(Validador.validarString(chave))){
			throw new Exception("Chave inválida");
		}
		if(!(Validador.validarString(atributo))){
			throw new Exception("Atributo inválido");
		}
		if(!((atributo.equals("nome")||atributo.equals("descricao")||atributo.equals("categoria")))){
			throw new Exception("Atributo inexistente");
		}
		if(!(Validador.validarString(tipoOrdenacao))){
			throw new Exception("Tipo inválido de ordenação");
		}
		if(!((tipoOrdenacao.equals("crescente")||tipoOrdenacao.equals("decrescente")))){
			throw new Exception("Tipo de ordenação inexistente");
		}
		if(!(Validador.validarString(criterioOrdenacao))){
			throw new Exception("Critério inválido de ordenação");
		}	
		if(!((criterioOrdenacao.equals("dataCriacao")||criterioOrdenacao.equals("reputacao")))){
			throw new Exception("Critério de ordenação inexistente");
		}
	}
}
